//
//  JGVividEngineInfo.h
//  JGVividEngine
//
//  Created by jagger.tu on 2025/3/19.
//

#import <Foundation/Foundation.h>
#import <JGVividEngine/JGVividEngineDataDefine.h>

NS_ASSUME_NONNULL_BEGIN

@interface JGVividEngineInfo : NSObject

#pragma mark - 环境信息

/// 访问密钥
@property (nonatomic, strong, readonly) NSString *accessKey;

/// LS版本
@property (nonatomic, strong, readonly) NSString *LSVersion;

#pragma mark - 用户信息
/// 设备ID
@property (nonatomic,strong, readonly) NSString *devId;
/// 用户唯一ID
@property (nonatomic,strong, readonly) NSString *uuid;
/// 流水ID
@property (nonatomic, strong, readonly) NSString *flowId;
/// SDK流水ID
@property (nonatomic, strong, readonly) NSString *sdkFlowId;
/// 当前用户允许其他用户进入的模式
@property (nonatomic, assign, readonly) JGPlayMode allowJoinMode;
/// 当前用户进入的游玩模式
@property (nonatomic, assign, readonly) JGPlayMode joinMode;
/// 计费ID
@property (nonatomic, strong, readonly) NSString* chargeId;

#pragma mark - 游戏信息

/// 当前gameId
@property (nonatomic, assign, readonly) NSInteger gameId;
/// 游戏类型
@property (nonatomic, assign) JGGameType gameType;

#pragma mark - 客户端信息

/// 客户端IP地址
@property (nonatomic, strong, readonly) NSString *address;
/// 客户端ISP信息
@property (nonatomic, strong, readonly) NSString *isp;
/// 客户端所在国家
@property (nonatomic, strong, readonly) NSString *country;
/// 客户端所在省份
@property (nonatomic, strong, readonly) NSString *province;
/// 客户端所在城市
@property (nonatomic, strong, readonly) NSString *city;

#pragma mark - 机房信息

/// 通道类型
@property (nonatomic, assign, readonly) JGConnectType connectType;
/// 区域ID
@property (nonatomic, assign, readonly) NSInteger areaType;
/// vmid
@property (nonatomic, assign, readonly) NSInteger vmId;
/// 服务IP
@property (nonatomic, strong, readonly) NSString *serverIp;
/// 服务端口
@property (nonatomic, assign, readonly) uint16_t serverBasePort;

#pragma mark - 操控信息

/// 触控类型
@property (nonatomic, assign, readonly) JGTouchType touchType;

#pragma mark - 流信息
/// 分配到实例后是否禁止自动拉流
@property (nonatomic, assign, readonly) BOOL disableAutoPullStream;
/// 请求设置的视频宽度(希望得到)
@property (nonatomic, assign, readonly) int reqVideoWidth;
/// 请求设置的视频高度(希望得到)
@property (nonatomic, assign, readonly) int reqVideoHeight;
/// 流的视频宽度(当前实际)
@property (nonatomic, assign, readonly) int curVideoWidth;
/// 流的视频高度(当前实际)
@property (nonatomic, assign, readonly) int curVideoHeight;
/// 云端桌面的宽(PC 游戏特有)
@property (nonatomic, assign, readonly) int desktopWidth;
/// 云端桌面的高(PC 游戏特有)
@property (nonatomic, assign, readonly) int desktopHeight;
/// 视频流等级
@property (nonatomic, assign, readonly) JGVideoLevel videoLevel;
/// 视频流分辨率
@property (nonatomic, assign, readonly) JGVideoResolution quality;
/// 视频流帧率
@property (nonatomic, assign, readonly) JGVideoFrame frameRate;
/// 流方向
@property (nonatomic, assign, readonly) JGStreamRotation streamRotation;
/// 视频填充模式
@property (nonatomic, assign, readonly) JGVideoFillMode videoFillMode;
/// 视频流状态
@property (nonatomic, assign, readonly) JGStreamStatus videoStreamStatus;
/// 音频流状态
@property (nonatomic, assign, readonly) JGStreamStatus audioStreamStatus;
/// 视频流渲染类型
@property (nonatomic, assign, readonly) JGVideoRenderedType renderedType;
/// 码率适应模式
@property (nonatomic, assign, readonly) JGBitrateGuidanceAdjustMode bitrateGuidanceAdjustMode;
/// 视频流类型
@property (nonatomic, assign, readonly) JGVideoStreamType videoStreamType;
/// 代表已经完成启动,例如从启动到收到`JGStatusGameRendering`
@property (nonatomic, assign, readonly) BOOL bLaunched;
/// 当前摄像头状态
@property (nonatomic, assign, readonly) BOOL bCameraOpen;
/// 当前麦克风状态
@property (nonatomic, assign, readonly) BOOL bMicrophoneOpen;

@end

NS_ASSUME_NONNULL_END
